package com.kater.promotion.impl;

import com.kater.fruit.Fruit;
import com.kater.promotion.Promotion;

import java.util.Map;

// 满减策略
public class FullSubtractionPromotion implements Promotion {

    // 享受优惠的最低总价阈值
    private double threshold;
    // 达到阈值后可享受的折扣金额
    private double reduction;

    /**
     * 构造函数初始化 FullSubtractionPromotion 对象。
     *
     * @param threshold 享受优惠的最低总价阈值
     * @param reduction 达到阈值后可享受的折扣金额
     */
    public FullSubtractionPromotion(double threshold, double reduction) {
        this.threshold = threshold;
        this.reduction = reduction;
    }

    /**
     * 应用促销折扣。
     * 本方法在继承自促销接口的实现基础上，提供了额外的折扣逻辑。
     * 它首先调用无促销情况下的价格计算，然后根据总价是否满足折扣条件来决定是否应用折扣。
     *
     * @param fruits 商品与数量的映射，用于计算总价。
     * @return 总价，如果总价高于折扣阈值，则返回应用折扣后的价格；否则返回原价。
     */
    @Override
    public double applyPromotion(Map<Fruit, Integer> fruits) {
        // 调用草莓促销策略的applyPromotion方法，计算草莓折扣时的总价
        double totalPrice = new StrawberryDiscount().applyPromotion(fruits);
        // 判断总价是否满足折扣条件，如果满足，则应用折扣；否则不应用折扣
        return totalPrice >= threshold ? totalPrice - reduction : totalPrice;
    }

}